TEMPmod Function

public function TEMPmod(Ta, Tmin, Tmax, Topt) result(f)

compute air temperature modifier. The growth and dormant stages of vegetation are related to the annual cycle of air temperature. Maximum growth will happen at optimal temperatures Topt and will stop when temperatures drop below or exceed certain temperature thresholds, Tmin and Tmax, respectively.

Reference:

Landsberg, J. J., and R. H. Waring, 1997: A generalised model of forest productivity using simplified concepts of radiation-use efficiency, carbon balance and partitioning. For. Ecol. Manage., 95, 209–228.

Arguments

Type IntentOptional Attributes Name
real(kind=float), intent(in) :: Ta
real(kind=float), intent(in) :: Tmin
real(kind=float), intent(in) :: Tmax
real(kind=float), intent(in) :: Topt

Return Value real(kind=float)


Variables

Type Visibility Attributes Name Initial
real(kind=float), public :: Tair

Source Code

FUNCTION  TEMPmod &
!
(Ta, Tmin, Tmax, Topt) &
!
RESULT (f)

IMPLICIT NONE

!Arguments with intent(in):
REAL (KIND = float), INTENT(IN) :: Ta ! current air temperature [°C] 
REAL (KIND = float), INTENT(IN) :: Tmin ! minimum temperature for vegetation growing [°C] 
REAL (KIND = float), INTENT(IN) :: Tmax ! maximum temperature for vegetation growing [°C]
REAL (KIND = float), INTENT(IN) :: Topt ! optimum temperature for vegetation growing [°C]

!local declarations:
REAL (KIND = float) :: f
REAL (KIND = float) :: Tair
!---------------------------------------end of declarations--------------------

IF ( Topt < Tmin) THEN 
    CALL Catch ('error', 'PlantsModifiers', 'Topt < Tmin cannot compute temperature modifier')
END IF

IF ( Topt > Tmax) THEN 
    CALL Catch ('error', 'PlantsModifiers', 'Topt > Tmax cannot compute temperature modifier')
END IF

!set tair
IF (Ta > Tmax ) THEN
    Tair = Tmax
    CALL Catch ('warning', 'PlantsModifiers', 'Tair > Tmax Tair set to Tmax')
ELSE IF (Ta < Tmin) THEN    
    Tair = Tmin
    CALL Catch ('warning', 'PlantsModifiers', 'Tair < Tmin Tair set to Tmin')
ELSE
    Tair = Ta
END IF
!compute modifier
f = ( Tair - Tmin ) / ( Topt - Tmin ) * &
    ( ( Tmax - Tair ) / ( Tmax - Topt ) ) ** ( (Tmax -Topt) / (Topt - Tmin) )

!final boundary check
IF ( f > 1.) THEN
    f = 1.
END IF

IF ( f < 0.) THEN
    f = 0.
END IF

RETURN
END FUNCTION TEMPmod